gh-143300: implement PyUnstable_SetImmortal#144543
Draft
kumaraditya303 wants to merge 3 commits intopython:mainfrom
Draft
gh-143300: implement PyUnstable_SetImmortal#144543kumaraditya303 wants to merge 3 commits intopython:mainfrom
PyUnstable_SetImmortal#144543kumaraditya303 wants to merge 3 commits intopython:mainfrom
Conversation
eendebakpt
reviewed
Feb 6, 2026
eendebakpt
reviewed
Feb 6, 2026
ngoldbaum
reviewed
Feb 6, 2026
|
|
||
| int | ||
| PyUnstable_SetImmortal(PyObject *op) | ||
| { |
Contributor
There was a problem hiding this comment.
should there maybe be a call to IsUniquelyReferenced as a sanity check? It won't be foolproof for objects that are transiently shared. However, if the argument isn't uniquely referenced then that's definitely incorrect use of this function.
Member
ZeroIntensity
left a comment
There was a problem hiding this comment.
I think we also need to document the guarantees regarding which objects may be made immortal. For example, the following results in an assertion failure:
from ctypes import pythonapi, py_object, c_int
set_immortal = pythonapi.PyUnstable_SetImmortal
set_immortal.argtypes = (py_object,)
set_immortal.restype = c_int
print(set_immortal("Hello world"))|
|
||
| .. c:function:: int PyUnstable_SetImmortal(PyObject *op) | ||
|
|
||
| Marks the object *op* immortal. The argument should be uniquely referenced by |
Member
There was a problem hiding this comment.
Suggested change
| Marks the object *op* immortal. The argument should be uniquely referenced by | |
| Marks the object *op* :term:`immortal`. The argument should be uniquely referenced by |
Comment on lines
+810
to
+811
| This is a one-way process: objects can only be made immortal, they cannot be | ||
| made mortal once again. Immortal objects do not participate in reference counting |
Member
There was a problem hiding this comment.
This is currently a comma-splice:
Suggested change
| This is a one-way process: objects can only be made immortal, they cannot be | |
| made mortal once again. Immortal objects do not participate in reference counting | |
| This is a one-way process: objects can only be made immortal; they cannot be | |
| made mortal once again. Immortal objects do not participate in reference counting |
Or alternatively:
Suggested change
| This is a one-way process: objects can only be made immortal, they cannot be | |
| made mortal once again. Immortal objects do not participate in reference counting | |
| This is a one-way process. Once an object is made immortal, it cannot be | |
| made mortal once again. Immortal objects do not participate in reference counting |
| and will never be garbage collected. | ||
|
|
||
| This function is intended to be used soon after *op* is created, by the code that | ||
| creates it, such as in the object's tp_new slot. |
Member
There was a problem hiding this comment.
Suggested change
| creates it, such as in the object's tp_new slot. | |
| creates it, such as in the object's :c:member:`~PyTypeObject.tp_new` slot. |
Comment on lines
+2796
to
+2797
| assert(op != NULL); | ||
| _Py_SetImmortal(op); |
Member
There was a problem hiding this comment.
Should this return 0 if op is already immortal?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📚 Documentation preview 📚: https://cpython-previews--144543.org.readthedocs.build/